package chap04.Infix;

/**
 * Created by root on 2017/7/6.
 */
class InToPost{
    private StackC theStack;
    private String input;
    private String output="";
    public InToPost(String in){
        input = in;
        int stackSize = input.length();
        theStack = new StackC(stackSize);
    }
     public String doTrans() {
        for (int j=0; j<input.length(); j++) {
            char ch = input.charAt(j);
            theStack.displayStack("For " + ch + " ");
            switch (ch) {
                case '+':
                case '-':
                    gotOper(ch, 1);
                    break;
                case '*':
                case '/':
                    gotOper(ch, 2);
                    break;
                case '(':
                    theStack.push(ch);
                    break;
                case ')':
                    gotParen(ch);
                    break;
                default:
                    output = output + ch;
                    break;
            }
        }
        while (!theStack.isEmpty()) {
            theStack.displayStack("while ");
            output = output + theStack.pop();
        }
        return output;
     }

     public void gotOper(char opThis, int prec1) {
        while (!theStack.isEmpty()) {
            char opTop = theStack.pop();
            if (opTop == '(') {
                theStack.push(opThis);
                break;
            } else {
                int prec2;

                if (opTop=='+' || opTop=='-') {
                    prec2 = 1;
                } else {
                    prec2 = 2;
                }
                if (prec2 < prec1) {
                    theStack.push(opTop);
                    break;
                } else {
                    output = output + opTop;
                }
            }
        }
        theStack.push(opThis);
     }

     public void gotParen(char ch) {
        while (!theStack.isEmpty()) {
            char chx = theStack.pop();
            if (chx == '(') {
                break;
            }
            output = output +chx;
        }
     }

}
public class InfixApp {
    public static void main(String[] args) {
        InToPost theTrans = new InToPost("A+B*C");
        String output = theTrans.doTrans();
        System.out.println("Postfix is " + output + '\n');

    }
}
